﻿namespace EyeOpen.Dependency
{
    using System;
    using System.Collections.Generic;

    public interface IDependencyContainer
    {
        T Resolve<T>();

        T Resolve<T>(string name);

        object Resolve(Type t);

        object Resolve(Type t, string name);

        IEnumerable<T> ResolveAll<T>();

        IEnumerable<object> ResolveAll(Type t);

        void RegisterInstance<T>(T instance);

        void RegisterInstance<TInterface>(string name, TInterface instance);

        void RegisterInstance<TInterface>(TInterface instance, Lifetime lifetime);

        void Teardown(object o);
    }
}